// todo url模块主要用于处理url

/*
todo ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
todo │                                              href                                              │
todo ├──────────┬──┬─────────────────────┬────────────────────────┬───────────────────────────┬───────┤
todo │ protocol │  │        auth         │          host          │           path            │ hash  │
todo │          │  │                     ├─────────────────┬──────┼──────────┬────────────────┤       │
todo │          │  │                     │    hostname     │ port │ pathname │     search     │       │
todo │          │  │                     │                 │      │          ├─┬──────────────┤       │
todo │          │  │                     │                 │      │          │ │    query     │       │
todo "  https:   //    user   :   pass   @ sub.example.com : 8080   /p/a/t/h  ?  query=string   #hash "
todo │          │  │          │          │    hostname     │ port │          │                │       │
todo │          │  │          │          ├─────────────────┴──────┤          │                │       │
todo │ protocol │  │ username │ password │          host          │          │                │       │
todo ├──────────┴──┼──────────┴──────────┼────────────────────────┤          │                │       │
todo │   origin    │                     │         origin         │ pathname │     search     │ hash  │
todo ├─────────────┴─────────────────────┴────────────────────────┴──────────┴────────────────┴───────┤
todo │                                              href                                              │
todo └────────────────────────────────────────────────────────────────────────────────────────────────┘

todo protocol 协议 http/https/file/ftp/ws/wss...
todo auth 权限
todo hostname 主机名（域名）
todo port 端口号 http80 https443
todo pathname 路径
todo search 查询字符串
todo hash #abc
*/

// const url = require("url");
// const str = "http://www.taobao.com?a=3&b=4";

// const fn = (url) => {
//   const query = url.split("?")[1]; // a=3&b=4;
//   const arr = query.split("&"); // ["a=3", "b=4"];
//   const obj = {};
//   arr.forEach((item) => {
//     const [key, value] = item.split("=");
//     obj[key] = value;
//   });
//   console.log(obj);
// };
// fn(str);

// todo parse方法是将url字符串转成url对象
// const obj = url.parse(str);
// console.log(obj);

// todo format方法是将url对象转成url字符串
// const str2 = url.format(obj);
// console.log(str2);

// todo 前后端通用
// const obj = new URL(str);
// console.log(obj.searchParams.get("b"));

// const query = "a=3&b=4";
// const obj = new URLSearchParams(query);
// console.log(obj);

const obj2 = { a: 3, b: 4 };
console.log(new URLSearchParams(obj2).toString());

/*
    append()：插入一个指定的键值对作文新的搜索参数
　　delete()：从搜索参数列表里删除指定的搜索参数及其对应的值
　　entries()：返回一个 iterator 可以遍历所有的键值对的对象
　　get()：获取指定搜索参数的第一个值
　　getAll()：获取指定搜索参数的所有值，组成一个数组
　　has()：返回Boolean值，判断是否存在次搜索参数
　　keys()：返回 iterator 此对象包含了键值对的所有键名
　　set()：设置一个搜索参数的新值，假如原来有多个值将删除其他所有的值
　　sort()：按键名排序
　　toString()：返回搜索参数组成的字符串，可以直接使用在URL上
　　values()：返回 iterator 此对象包含了键值对的所有值
*/
